// 引入所需的模块
const express = require('express');  // 引入Express模块
const WebSocket = require('ws');      // 引入WebSocket模块
const http = require('http');         // 引入HTTP模块（虽然Express已经包含了它，但这里显式引入是为了创建HTTP服务器）

// 创建Express应用
const app = express();

// 使用Express应用创建一个HTTP服务器
const server = http.createServer(app);

// 创建一个WebSocket服务器并将其附加到HTTP服务器上
const wss = new WebSocket.Server({ server });

// 存储所有连接的WebSocket客户端的数组
let clients = [];

// 当有新的WebSocket连接时触发
wss.on('connection', (ws) => {
  // 将新的WebSocket客户端添加到客户端数组中
  clients.push(ws);
  console.log('New client connected');

  // 当接收到来自客户端的消息时触发
  ws.on('message', (message) => {
    // 解析接收到的JSON消息
    const evt = JSON.parse(message);
    // 遍历所有客户端，并将消息发送给除了发送者之外的所有其他打开的客户端
    clients.forEach((client) => {
      if (client !== ws && client.readyState === WebSocket.OPEN) {
        client.send(JSON.stringify(evt));
      }
    });
  });

  // 当WebSocket连接关闭时触发
  ws.on('close', () => {
    // 从客户端数组中移除已关闭的WebSocket客户端
    clients = clients.filter((client) => client !== ws);
    console.log('Client disconnected');
  });
});

// 让HTTP服务器监听8080端口
server.listen(8080, () => {
  console.log('Server is listening on port 8080');
});
